#pragma GCC optimize(2)
#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int N=4e5+10;
int ne[N];
int ans[N];
int st[N];
int d[N];
int en;
struct node 
{
    ll x, y;
    int id;
    int cnt;
    bool operator<(const node& other) const {
        return x < other.x;
    }
}a[N];

void dfs(int u,int beg,ll des,int cnt)
{
	if(a[u].y<des)
	{
//		cout<<st[u]<<endl;
		int j=ne[u];
		if(st[u]) dfs(st[u],beg,des,cnt+d[u]);
		else dfs(j,beg,des,cnt+1);
	
		st[u]=en;
		d[u]=a[beg].cnt-cnt;
	}
	else
	{
		a[beg].cnt=cnt;
		en=u;
		return ;
	}
}
int main()
{
	IOS;
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].x>>a[i].y;
		if(a[i].y<a[i].x)
		{
			a[i].y+=m;
		}
		a[i].id=i;
		a[i+n].x=a[i].x+m;
		a[i+n].y=a[i].y+m;
	}
	
    sort(a+1,a+1+2*n);

	for(int i=1,j=1;i<=2*n;i++)
	{
		while(j<=2*n && a[i].y>=a[j].x)
		{
			ne[i]=j;
			j++;
		}
		j-=1;
//		cout<<ne[i]<<endl;
	} 
	
	for(int i=1;i<=n;i++)
	{
		dfs(i,i,a[i].x+m,1);
	}
	
    for(int i=1;i<=n;i++) ans[a[i].id]=a[i].cnt;
    
    for(int i=1;i<=n;i++) cout<<ans[i]<<' ';
	
	return 0;
}

